'use strict';
var exec = require("child_process").exec;
var querystring = require("querystring");
var fs = require("fs");
var formidable = require('formidable');


function start(response, postData){
    console.log("Request handler 'start' was called.");

    //阻塞操作
    // function sleep(milliSeconds){
    //     var startTime = new Date().getTime();
    //     while(new Date().getTime() < startTime + milliSeconds);
    // }
    // sleep(10000);
    // return "Hello Start";

    //非阻塞操作
    // exec("find /", { timeout: 10000, maxBuffer: 20000 * 1024 },
    //     function (error, stdout, stderr) {
    //         console.log("ls -lah callback");
    //         console.log("stdout: "+ stdout);
    //         response.writeHead(200, { "Content-Type": "text/plain" });
    //         response.write(stdout);
    //         response.end();
    //     });

    var body = '<html>'+
    '<head>'+
    '<meta http-equiv="Content-Type" '+
    'content="text/html; charset=UTF-8" />'+
    '</head>'+
    '<body>'+
    '<form action="/upload" enctype="multipart/form-data" '+
    'method="post">'+
    '<input type="file" name="upload">'+
    '<input type="submit" value="Upload file" />'+
    '</form>'+
    '</body>'+
    '</html>';

    response.writeHead(200, {"Content-Type": "text/html"});
    response.write(body);
    response.end();
}

function upload(response, request) {
    console.log("Request handler 'upload' was called.");

    var form = new formidable.IncomingForm();
    form.uploadDir = "./tmp"; 
    console.log("about to parse");
    form.parse(request, function (error, fields, files) {
        console.log("parsing done");
        console.log(files.upload.path);
        fs.renameSync(files.upload.path, "./tmp/test.png");
        response.writeHead(200, { "Content-Type": "text/html" });
        response.write("received image:<br/>");
        response.write("<img src='/show' />");
        response.end();
    });

}

function show(response, postData) {
    console.log("Request handler 'show' was called.");
    fs.readFile("./tmp/test.png", "binary", function (error, file) {
        if (error) {
            response.writeHead(500, { "Content-Type": "text/plain" });
            response.write(error + "\n");
            response.end();
        } else {
            response.writeHead(200, { "Content-Type": "image/png" });
            response.write(file, "binary");
            response.end();
        }
    });
}


exports.start = start;
exports.upload = upload;
exports.show = show;